(() => {
/* 
类型别名: 给一个类型取一个友好的别名, 后面就可以通过别名来引用这个类型
类型别名并没有创建新的数据类型, 而接口是创建了一个新的数据类型
*/
let status: 1|2|3 = 1
// status = 4 // error
status = 3

type Status = 1 | 2 | 3
let status2: Status = 2
// status2 = 5 // error

interface Person {
  name: string;
  age: number
}

let persons: Person[] = [{name: 'tom', age: 12}]

type Persons = Person[]
let persons2: Persons = [{name: 'tom', age: 12}]

})();

(() => {
  /* 
  JS的typeof: 得到数据类型的名称
  TS的typeof: 得到数据类型
  
  当将typeof的结果作为类型使用 => TS的
  */
  const person = {
    name: 'tom',
    age: 12
  }
  function fn (x: number): string {
    return x + 'abc'
  }

  console.log(typeof person) // 'object'
  console.log(typeof fn) // 'function'
  console.log(typeof person.name) // 'string'

  let p2: typeof person = {name: 'jack', age: 23}
  let fn2: typeof fn = (y: number) => {
    return 'abc'
  }
  let n2: typeof person.name  = 'aa'

  // 给typeof的类型取别名 => 可以反复使用
  type Person = typeof person
  let p3: Person = {name: 'yyy', age: 34}
})();